ucaller

package module
v1.0.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 26, 2022 License: MIT Imports: 8 Imported by: 0

README

UCaller

адаптер для работы с сервисом https://ucaller.ru/

Оффициальная документация https://ucaller.ru/doc

Example

package main

import "github.com/AleksandrMac/ucaller"

func main() {
    service, _ := ucaller.New(
        &ucaller.InputData{
            SecretKey:        "zxcvbasdfgqwertZXCVBASDFGQWERT23",
            ID:               103000,
            FreeRepeatTime:   5 * time.Minute,
            FreeRepeatNumber: 2,
        }, nil)

    responseInitCall, err = service.InitCall(
        &ucaller.InitCall{
            Phone:  &phone,
            Code:   &code,
            Client: &client,
            Unique: &unique,
        }
    )
}

Documentation

Index

Constants

View Source
const (
	MaxCode            uint16 = 9999
	MaxLenForSecretKey int    = 32
	APIURL             string = "https://api.ucaller.ru/v1.0"
)

Variables

This section is empty.

Functions

func GetInitCallURL

func GetInitCallURL(s *Service, ic *InitCall) (string, error)

Types

type Client

type Client struct{}

func (*Client) Get

func (c *Client) Get(url string) (body []byte, err error)

type ID

type ID uint64

type InitCall

type InitCall struct {
	// REQUIRED. Без + с кодом страны. Номер телефона пользователя, которому будет совершен звонок с авторизацией.
	// Цифровое значение
	Phone *uint64 `json:"phone"`

	// 4 цифры. На эти 4 цифры будет заканчиваться исходящий от нас звонок к вашему пользователю.
	// Если `code` не передан, он будет автоматически сгенерирован нами.
	// Цифровое значение
	Code *uint16 `json:"code"`

	// До 64 символов. Можете передать информацию о вашем пользователе, например его никнейм, E-mail и так далее.
	// В статистике сервиса сможете найти ту или иную авторизацию по этому параметру.
	// Набор символов
	Client *string `json:"client"`

	// До 64 символов. Для активации идемпотентности запроса.
	// Рекомендуем использовать V4 UUID.
	// Набор символов
	Unique *string `json:"unique"`
}

type InputData

type InputData struct {
	// Секретный ключ вашего сервиса, Строка, 32 символа
	SecretKey string

	// ID вами созданного сервиса, Цифровое значение
	ID uint32

	// FreeRepeatTime время отведенное для совершения бесплатного повторного звонка
	FreeRepeatTime time.Duration

	// FreeRepeatNumber количество бесплатных повторов
	FreeRepeatNumber uint8
}

type PhoneInfo

type PhoneInfo struct {
	Operator string `json:"operator"` // Оператор связи
	Region   string `json:"region"`   // регион субъеккта Российской федерации
	MNP      string `json:"mnp"`      // Если у номера был сменен оператор - MNP покажет нового оператора
}

type Requester

type Requester interface {
	Get(url string) (body []byte, err error)
}

type ResponseBalance

type ResponseBalance struct {
	// true в случае успеха, false в случае неудачи
	Status bool `json:"status"`

	// Остаточный баланс на рублевом счете аккаунта
	Rub float32 `json:"rub_balance"`

	// Остаточный бонусный баланс
	Bonus float32 `json:"bonus_balance"`

	// Кодовое значение вашего тарифного плана
	Tariff string `json:"tariff"`

	// Название тарифного плана
	TariffName string `json:"tariff_name"`

	Error string `json:"error"`
}

type ResponseInfo

type ResponseInfo struct {
	// true в случае успеха, false в случае неудачи
	Status bool `json:"status"`

	// запрошенный uCaller ID
	ID ID `json:"ucaller_id"`

	// время, когда была инициализирована авторизация
	InitTime uint64 `json:"init_time"`

	// Статус звонка,
	// -1 = информация проверяется (от 1 сек до 1 минуты),
	//  0 = дозвониться не удалось,
	//  1 = звонок осуществлен
	CallStatus int8 `json:"call_status"`

	// является ли этот uCaller ID повтором (initRepeat), если да, будет добавлен first_ucaller_id с первым uCaller ID этой цепочки
	IsRepeated bool `json:"is_repeated"`

	// возможно ли инициализировать бесплатные повторы (initRepeat)
	Repeatable bool `json:"repeatable"`

	// Появляется в случае repeatable: true, говорит о количестве возможных повторов
	RepeatTimes uint8 `json:"repeat_times"`

	// цепочка  uCaller ID инициализированных повторов (initRepeat)
	RepeatedUIDs []ID `json:"repeated_ucaller_ids"`

	// ключ идемпотентности (если был передан)
	UniqueRequestID uuid.UUID `json:"unique"`

	// идентификатор пользователя переданный клиентом (если был передан)
	Client string `json:"client"`

	// номер телефона пользователя, куда мы совершали звонок
	Phone uint64 `json:"phone"`

	// код авторизации
	Code uint64 `json:"code"`

	// ISO код страны пользователя
	CountryCode string `json:"country_code"`

	// static.ucaller.ru/flag/ru.svg, изображение флага страны пользователя
	CountryImage string `json:"country_image"`

	// информация по телефону
	PhoneInfo []PhoneInfo `json:"phone_info"`

	// сколько стоила эта авторизация клиенту
	Cost float32 `json:"cost"`

	Error string `json:"error"`
}

type ResponseInitCall

type ResponseInitCall struct {
	// true в случае успеха, false в случае неудачи
	Status bool `json:"status"`

	// уникальный ID в системе uCaller, который позволит проверять статус и инициализировать метод initRepeat
	ID ID `json:"ucaller_id"`

	// номер телефона, куда мы совершили звонок
	Phone string `json:"phone"`

	// код, который будет последними цифрами в номере телефона
	Code interface{} `json:"code"`

	// идентификатор пользователя переданный клиентом
	Client string `json:"client"`

	// появляется только если вами был передан параметр `unique`
	UniqueRequestID uuid.UUID `json:"unique_request_id"`

	// появляется при переданном параметре `unique`, если такой запрос уже был инициализирован ранее
	Exists bool `json:"exists"`

	Error string `json:"error"`
}

type ResponseInitRepeat

type ResponseInitRepeat struct {
	// true в случае успеха, false в случае неудачи
	Status bool `json:"status"`

	// уникальный ID в системе uCaller, который позволит проверять статус и инициализировать метод initRepeat
	ID ID `json:"ucaller_id"`

	// номер телефона, куда мы совершили звонок
	Phone string `json:"phone"`

	// код, который будет последними цифрами в номере телефона
	Code interface{} `json:"code"`

	// идентификатор пользователя переданный клиентом
	Client string `json:"client"`

	// появляется только если вами был передан параметр `unique`
	UniqueRequestID uuid.UUID `json:"unique_request_id"`

	// появляется при переданном параметре `unique`, если такой запрос уже был инициализирован ранее
	Exists bool `json:"exists"`

	// показывает, что осуществлена повторная авторизация
	FreeRepeated bool `json:"free_repeated"`

	Error string `json:"error"`
}

type ResponseService

type ResponseService struct {
	// true в случае успеха, false в случае неудачи
	Status bool `json:"status"`

	// ID сервиса
	ServiceStatus uint64 `json:"service_status"`

	// Название сервиса
	Name string `json:"name"`

	// Время создания сервиса в unix формате
	CreationTime uint64 `json:"creation_time"`

	// Время последнего не кэшированного обращения к API сервиса в unix формате
	LastRequest uint64 `json:"last_request"`

	// E-mail адрес владельца сервиса
	Owner string `json:"owner"`

	// Информация о том, где будет использоваться сервис
	UseDirection string `json:"use_direction"`

	// Состояние тестового режима на текущий момент
	NowTest bool `json:"now_test"`

	// Информация о тестовом состоянии
	TestInfo TestInfo `json:"test_info"`

	Error string `json:"error"`
}

type Service

type Service struct {
	Requester
	// contains filtered or unexported fields
}

func New

func New(i *InputData, req Requester) (*Service, error)

func (*Service) AddCalls added in v1.0.1

func (s *Service) AddCalls(uID ID)

func (*Service) Calls

func (s *Service) Calls(id ID) []ID

func (*Service) GetBalance

func (s *Service) GetBalance() (r *ResponseBalance, err error)

func (*Service) GetInfo

func (s *Service) GetInfo(uid ID) (r *ResponseInfo, err error)

func (*Service) GetService

func (s *Service) GetService() (r *ResponseService, err error)

func (*Service) InitCall

func (s *Service) InitCall(ic *InitCall) (r *ResponseInitCall, err error)

func (*Service) InitRepeat

func (s *Service) InitRepeat(uid ID) (r *ResponseInitRepeat, err error)

type TestInfo

type TestInfo struct {
	// Оставшееся количество бесплатных тестовых обращений
	TestRequests uint64 `json:"test_requests"`

	// Верифицированный номер телефона для тестовых обращений
	VerifiedPhone uint64 `json:"verified_phone"`
}

type UCaller

type UCaller interface {
	// InitCall Данный метод позволяет инициализировать авторизацию для пользователя вашего приложения.
	InitCall(ic *InitCall) (*ResponseInitCall, error)

	// InitRepeat В случае, если ваш пользователь не получает звонок инициализированный методом initCall,
	// вы можете два раза и совершенно бесплатно инициализировать повторную авторизацию по uCaller ID,
	// который вы получаете в ответе метода initCall.
	// Повторную авторизацию можно запросить только в течение пяти минут с момента выполнения основной авторизации методом initCall.
	// Все данные, например `code` или `phone`, совпадают с теми же, которые были переданы в первом запросе initCall.
	InitRepeat(uid ID) (*ResponseInitRepeat, error)

	// GetInfo возвращает развернутую информацию по уже осуществленному uCaller ID
	GetInfo(uid ID) (*ResponseInfo, error)

	//  Этот метод возвращает информацию по остаточному балансу.
	GetBalance() (*ResponseBalance, error)

	// Этот метод возвращает информацию по сервису.
	GetService() (*ResponseService, error)
}

Directories

Path Synopsis
Package mock_ucaller is a generated GoMock package.
Package mock_ucaller is a generated GoMock package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL