Как я могу получить запись вызова RingCentral из отслеживаемого входящего вызова?

Я отслеживаю входящие вызовы на RingCentral, прослушивая фильтр событий Call Session Notifications (CSN) telephony/sessions:

/restapi/v1.0/account/~/extension/~/telephony/sessions

Из этого я буду получать события, подобные следующим. Появится свойство recordings, указывающее, что запись доступна. Как я могу восстановить эту запись?

{
  "uuid":"12345678901234567890",
  "event":"/restapi/v1.0/account/11111111/extension/22222222/telephony/sessions",
  "timestamp":"2019-03-08T22:30:40.059Z",
  "subscriptionId":"11112222-3333-4444-5555-666677778888",
  "ownerId":"33333333",
  "body":{
    "sequence":7,
    "sessionId":"1234567890",
    "telephonySessionId":"1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
    "serverId":"10.11.12.13.TAM",
    "eventTime":"2019-03-08T22:30:39.938Z",
    "parties":[
      {
        "accountId":"11111111",
        "extensionId":"22222222",
        "id":"cs12345678901234567890-2",
        "direction":"Inbound",
        "to":{
          "phoneNumber":"+16505550100",
          "name":"Jane Doe",
          "extensionId":"22222222"
        },
        "from":{
          "phoneNumber":"+14155550100",
          "name":"John Smith"
        },
        "recordings":[
          {
            "id":"44444444",
            "active":false
          }
        ],
        "status":{
          "code":"Answered",
          "rcc":false
        },
        "missedCall":false,
        "standAlone":false,
        "muted":false
      }
    ],
    "origin":{
      "type":"Call"
    }
  }
}

person Grokify    schedule 08.03.2019    source источник


Ответы (1)


Есть два способа получить запись, используя информацию в событии уведомления о сеансе вызова (CSN), а именно свойство recordings[0].id и свойство sessionID.

  1. получение полного URL-адреса мультимедиа путем вызова конечной точки call-log со свойством sessionId
  2. создание URL-адреса носителя записи вручную с использованием свойства recordings[0].id.

Примечание 1. Во время разговора запись будет недоступна для извлечения, даже если идентификатор записи присутствует в событии уведомления о сеансе вызова. Запись будет доступна для восстановления вскоре после завершения разговора.

Примечание 2. Записи звонков могут быть в формате MP3 или WAV, определяемом компанией. Чтобы отличить, проверьте заголовок ответа Content-Type для типа MIME при извлечении файла носителя записи.

1) Получение полного медиального URL через API журнала вызовов

Выполнение промежуточного API-вызова call-log API имеет двойное преимущество: это официальный подход к получению URL-адреса мультимедиа и предоставление дополнительных метаданных для вызова. При таком подходе recording.id в записи call-log будет соответствовать свойству recordings[0].id в событии Call Session Notification.

И учетная запись компании, и API расширения пользователя call-log могут быть вызваны с параметром sessionId из события, как показано ниже:

GET /restapi/v1.0/account/~/call-log?sessionId={sessionId}
GET /restapi/v1.0/account/~/extension/~/call-log?sessionId={sessionId}

В этом примере sessionId равно 1234567890, поэтому у вас будет URL-адрес API журнала вызовов компании, как показано ниже.

GET /restapi/v1.0/account/~/call-log?sessionId=1234567890

Объект ответа будет иметь свойство recording, которое предоставляет ссылки на гипермедиа для получения медиафайла. Файл может быть в формате WAV или MP3, о чем сообщается в заголовке ответа Content-Type.

{
  "uri": "https://platform.ringcentral.com/restapi/v1.0/account/11111111/extension/22222222/call-log?view=Simple&sessionId=1234567890&page=1&perPage=100",
  "records": [
    {
      "uri": "https://platform.ringcentral.com/restapi/v1.0/account/11111111/extension/22222222/call-log/1234567890ABCDEFGabcdefgh?view=Simple",
      "id": "1234567890ABCDEFGabcdefgh",
      "sessionId": "1234567890",
      "startTime": "2019-03-08T22:30:29.505Z",
      "duration": 35,
      "type": "Voice",
      "direction": "Inbound",
      "action": "Phone Call",
      "result": "Accepted",
      "to": {
        "phoneNumber": "+16505550100",
        "name": "Jane Doe"
      },
      "from": {
        "phoneNumber": "+14155550100",
        "name": "John Smith",
        "location": "San Francisco, CA"
      },
      "recording": {
        "uri": "https://platform.ringcentral.com/restapi/v1.0/account/11111111/recording/44444444",
        "id": "44444444",
        "type": "OnDemand",
        "contentUri": "https://media.ringcentral.com/restapi/v1.0/account/111111111/recording/44444444/content"
      },
      "extension": {
        "uri": "https://platform.ringcentral.com/restapi/v1.0/account/111111111/extension/22222222",
        "id": 22222222
      },
      "reason": "Accepted",
      "reasonDescription": "The call connected to and was accepted by this number."
    }
  ],
  "paging": {
    "page": 1,
    "perPage": 100,
    "pageStart": 0,
    "pageEnd": 0
  },
  "navigation": {
    "firstPage": {
      "uri": "https://platform.ringcentral.com/restapi/v1.0/account/11111111/extension/22222222/call-log?view=Simple&sessionId=1234567890&page=1&perPage=100"
    },
    "lastPage": {
      "uri": "https://platform.ringcentral.com/restapi/v1.0/account/11111111/extension/22222222/call-log?view=Simple&sessionId=1234567890&page=1&perPage=100"
    }
  }
}

2) Ручное создание URL-адреса мультимедиа

Вы можете вызвать конечную точку API записи и получить медиаданные напрямую, вручную создав URL-адрес записи следующим образом:

https://media.ringcentral.com/restapi/v1.0/account/{accountId}/recording/{recordingId}/content

В этом примере accountId равно 11111111, а recordingId равно 44444444 для следующего:

https://media.ringcentral.com/restapi/v1.0/account/11111111/recording/44444444/content

accountId в URL-пути можно установить для текущей учетной записи авторизованного пользователя, используя ~. Кроме того, его можно установить явно, извлекая accountId из свойства event или используя свойство accountId в соответствующем объекте party. Рекомендуется использовать ~ для установки accountId.

Примечание. Этот подход может быть быстрым, он может быть подвержен ошибкам, так как RingCentral однажды изменил имя медиа-хоста в прошлом. Несмотря на отсутствие ожидаемых будущих изменений, вызов call-log API и получение полного URL-адреса мультимедиа из ответа является более безопасным и рекомендуемым подходом. См. ниже этот подход. Это включено только потому, что некоторые люди попробуют это и могут столкнуться с проблемами позже.

3) Гибридный подход

Первый подход вызова конечной точки call-log является рекомендуемым подходом, однако он включает дополнительный вызов API, и в большинстве случаев второй подход должен работать нормально.

Гибридный подход заключается в том, чтобы создать URL-адрес, как в подходе 2, а затем вернуться к подходу 1, если подход 2 возвращает 404 или другую ошибку.

person Grokify    schedule 08.03.2019
comment
Кроме того, пока вызов активен и активен, вы не сможете получить содержимое записи с конечной точки. Контент будет доступен, как только вызов завершится. - person Dibyendu Roy; 21.03.2019