Skip to content

Instantly share code, notes, and snippets.

@over
Last active August 30, 2017 09:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save over/60c385d13dac78a5131c300acc811fce to your computer and use it in GitHub Desktop.
Save over/60c385d13dac78a5131c300acc811fce to your computer and use it in GitHub Desktop.

Порядок работы с API

Начать пользоваться нашим API легко. Просто выполните указанные действия по порядку:

  1. Получить ключ авторизации
  2. Создать организацию
  3. Создать канал связи

Теперь всё готово для работы с переписками и сообщениями.

  1. Получить список переписок
  2. Получить все сообщения в переписке
  3. Отправить сообщение в переписку
  4. Как писать первым в whatsapp

Авторизация

Происходит через private_api_token который выдается через contact@pact.im или чат на сайте.

Пример запроса: curl -X GET 'https://api.pact.im/p1/companies?private_api_token=XXXXX'

Создание организации

POST /p1/companies

{
  name: string,     # Required
  phone: string,    # Optional
  description: text, # Optional
  webhook_url: string # Optional
}

Response:

{
  status: string,       # ENUM: 'created|inited|errored'
  data: {
    external_id: integer  # Company ID
  },
  errors: [string]    # Errors if status `errored`
}

Получить список организаций

GET /p1/companies

Response:

{
  status: string,       # ENUM: 'ok|errored'
  data: {
    companies: [
      {
        external_id: integer,
        name: string,
        phone: string,
        description: text, # Optional
        webhook_url: string # Optional
      }
    ]
  }
  errors: [string]    # Errors if status `errored`
}

Обновление организации

PUT /p1/companies/COMPANY_ID

{
  name: string,     # Optional
  phone: string,    # Optional
  description: text, # Optional
  webhook_url: string # Optional
}

Response:

{
  status: string,       # ENUM: 'updated|errored'
  data: {
    external_id: integer, # Company ID
  },
  errors: [string]    # Errors if status `errored`
}

Создание канала связи

Каналом связи может быть аккаунт telegram, instagram, viber, whatsapp, группа Вконтакте либо страница Facebook. Если вы подключаете whatsapp обязательно ознакомьтесь с webhook-ом для получения QR-кода.

POST /p1/companies/COMPANY_ID/channels

{
  provider: string,   # Required. ENUM: 'whatsapp|facebook|vk|telegram|instagram|viber'
  token: string,      # Required for 'facebook|vk|telegram|viber'
  login: string,      # Required for 'instagram'
  password: string    # Required for 'instagram'
}

Response:

{
  status: string,         # ENUM: 'created|inited|errored'
  data: {
    external_id: integer, # Channel ID
  },
  errors: [string]        # Errors if status `errored`
}

Получить список каналов связи

GET /p1/companies/COMPANY_ID/channels

Response:

{
  status: string,       # ENUM: 'ok|errored'
  data: {
    channels: [
      {
        external_id: integer,
        provider: string,
       }
    ]
  }
  errors: [string]    # Errors if status `errored`
}

Обновление канала связи

PUT /p1/companies/COMPANY_ID/channels/CHANNEL_ID

{
  token: string,    # Required for 'facebook|vk|telegram|viber'
  login: string,    # Required for 'instagram'
  password: string # Required for 'instagram'
}

Response:

{
  status: string,       # ENUM: 'updated|errored'
  data: {
    external_id: integer, # Channel ID
  },
  errors: [string]    # Errors if status `errored`
}

Отключение канала связи

DELETE /p1/companies/COMPANY_ID/channels/CHANNEL_ID

Response:

{
  status: string,       # ENUM: 'deleted|errored'
  errors: [string]    # Errors if status `errored`
}

Получить список переписок

GET /p1/companies/COMPANY_ID/conversations

Response:

{
  status: string,       # ENUM: 'ok|errored'
  data: {
    conversations: [
      {
        external_id: integer,
        name: string,
        channel_id: integer,
        channel_type: string, # ENUM: 'whatsapp|facebook|vk|telegram|instagram|viber'
        created_at: timestamp,
        last_message_at: timestamp,
        last_income_message_at: timestamp
      }
    ]
  }
  errors: [string]    # Errors if status `errored`
}

Получить все сообщения в переписке

GET /p1/companies/COMPANY_ID/conversations/CONVERSATION_ID/messages

Response:

{
  status: string,       # ENUM: 'ok|errored'
  data: {
    messages: [
      {
        external_id: integer,
        channel_id: integer,
        channel_type: string,  # ENUM: 'whatsapp|facebook|vk|telegram|instagram|viber'
        message: string,
        income: boolean,       # true|false
        created_at: timestamp, # External timestamp (where message was send in messenger)
        attachments: [
          {
            external_id: integer,
            url: string,
            caption: string,
            metadata: {}
          }
        ]
      }
    ]
  }
  errors: [string]    # Errors if status `errored`
}

Отправить сообщение в переписку

POST /p1/companies/COMPANY_ID/conversations/CONVERSATION_ID/messages

{
  message: "Hello world"
}

Response:

{
  status: string,       # ENUM: 'ok|errored'
  data: {
    message: {
      external_id: integer,
      channel_id: integer,
      channel_type: string,  # ENUM: 'whatsapp|facebook|vk|telegram|instagram|viber'
      message: string,
      income: boolean,       # true|false
      created_at: timestamp, # External timestamp (where message was send in messenger)
      attachments: [
        {
          external_id: integer,
          url: string,
          caption: string,
          metadata: {}
        }
      ]
    }
  }
  errors: [string]    # Errors if status `errored`
}

Вебхуки

Мы можем оповещать внешние сервисы HTTP коллбеками по заданному URL (атрибут webhook_url в объекте company). Ниже пример данных которые мы отправляем:

Системные уведомления:

{
  type: 'system',
  severity: string,  # ENUM: 'critical|notification|information'
  data: {
    message: string,
    code: integer,
    date: timestamp,
    details: {
      entity: string, # ENUM 'company|channel|conversation|message',
      entity_id: integer
    }
  }
}

Пришло новое сообщение

{
  type: 'conversation',
  event: 'new',
  data: {
    external_id: integer,
    name: string,
    channel_id: integer,
    channel_type: string, # ENUM: 'whatsapp|facebook|vk|telegram|instagram|viber'
    created_at: timestamp,
    last_message_at: timestamp,
    last_income_message_at: timestamp
  }
}

Новое сообщение в существующей переписке

{
  type: 'message',
  event: 'new',
  data: {
    external_id: integer,
    channel_id: integer,
    channel_type: string,  # ENUM: 'whatsapp|facebook|vk|telegram|instagram|viber'
    message: string,
    income: boolean,       # true|false
    created_at: timestamp, # External timestamp (where message was send in messenger)
    attachments: [
      {
        external_id: integer,
        url: string,
        caption: string,
        metadata: {}
      }
    ]
  }
}

QR-код для подключения whatsapp

После создания канала имеющего тип whatsapp начинается периодическая отправка коллбэка содержащего изображение QR-кода в формате data url base64 encoded image. Данное изображение необходимо вывести на экран для последующего сканирования пользователем в мобильном приложении Whatsapp. Отправка коллбэка данного типа прекращается после успешного подключения Whatsapp.

{
  type: 'qr_code',
  event: 'new',
  channel_id: integer,
  data: {
    expired: integer, # milliseconds from the Unix epoch: 1500362776592
    image: string # data URL: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAAADwCAYAAAA+VemSAAAWDUlEQVR4Xu3d...."
  }
}

Как писать первым в whatsapp

Для того чтобы написать первым клиенту, которого нет в списке контактов нужно выполнить запрос указанный ниже. При успешном выполнении запроса будет автоматически создан conversation, а также будут отправлены два webhook-а с типами 'conversation' и 'message' содержащие всю информацию о начатой переписке. Дальнейшую отправку сообщений в созданную переписку следует выполнять так как описано в пункте Отправить сообщение в переписку данного руководства.

POST /p1/companies/COMPANY_ID/channels/CHANNEL_ID/conversations

{
  phone: string,   # Phone number: '79220010101'
  text: string     # text message
}

Response:

{
  status: string,         # ENUM: 'ok|errored'
  errors: [string]        # Errors if status `errored`
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment