@ASiD

Почему не уходит сообщение пользователю от бота через Microsoft Bot Framework?

Доброго времени суток. Пишу бота для Skype на PHP. Раньше у него был свой API, но сейчас сделать это можно только через Microsoft Bot Framework.

Что сделал:
  1. Зарегистрировался в MS Azure, оформил бесплатную подписку
  2. Создал бота, добавил пароль (получил ид приложения и пароль), указал Message endpoint (ссылка, по которой будут лететь сообщения от пользователей)
  3. Написал скрипт, который отправляет "123" в ответ на любое сообщение


Скрипт делает следующее:
  1. Получает входные данные
  2. Отправляет запрос на получение токена
  3. Отправляет ответное сообщение


Данные скрипту приходят, токен авторизации получается получается, а вот с отправкой сообщения возникли проблемы - в ответ на запрос приходит "1", но сообщение в диалоге не появляется. Пробовал через вебчат для теста в MS Azure и через скайп.

Код:
<?php 

$client_id = 'aaaaaaaa-bbbb-4444-acc1-f000000081b0';
$client_secret = 'sbjpfcxagfd19:ibEIB3*[#';
$authRequestUrl = 'https://login.microsoftonline.com/common/oauth2/v2.0/token';

$request = file_get_contents("php://input");
$input = json_decode($request, true);

$authRequestOptions = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
        'method'  => 'POST',
        'content' => http_build_query(
            array(
                'grant_type' => 'client_credentials',
                'client_id' => $client_id, //ID приложения
                'client_secret' => $client_secret, //Пароль приложения
                'scope' => 'https://graph.microsoft.com/.default'
            )
        )
    )
);

$authRequestContext  = stream_context_create($authRequestOptions);
$authResult = file_get_contents($authRequestUrl, false, $authRequestContext);

$authData = json_decode($authResult, true);

$deserializedResponseActivity = array(

    //Мы отвечаем обычным сообщением
    'type' => 'message',

	//Сообщаем id и имя участника чата (берем из полей recipient->id и recipient->name входящего POST-запроса с сообщением, то есть id и name, которым было адресовано входящее сообщение)
    'from' => array(
        'id' => (string)$input['recipient']['id'], 
        'name' => (string)$input['recipient']['name']
	),
	
	//Устанавливаем id беседы, в которую мы отвечаем (берем из поля conversation->id входящего POST-запроса с сообщением)
    'conversation' => array(
        'id' => (string)$input['conversation']['id'] 
    ),
	
	//Устанавливаем id и имя участника чата, к которому обращаемся, он отправил нам входящее сообщение (берем из полей from->id и from->name входящего POST-запроса с сообщением)
    'recipient' => array(
        'id' => (string)$input['from']['id'],
        'name' => (string)$input['from']['name']
    ),
	
	
    //Текст ответа на сообщение
    // 'text' => $message,
    'text' => '123',

    
    //Устанавливаем внутренний ID активности, в контексте которого мы находимся (берем из поля id входящего POST-запроса с сообщением)
    'replyToId' => (string)$input['id']
    
);

$responseActivityRequestUrl = rtrim($input['serviceUrl'], '/') . '/v3/conversations/' . $deserializedResponseActivity['conversation']['id'] . '/activities/' . urlencode($deserializedResponseActivity['replyToId']);


$ch = curl_init($responseActivityRequestUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($deserializedResponseActivity));

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
	'Authorization: ' . $authData['token_type'] . ' ' . $authData['access_token'],
	'Content-Type: application/json'
));

$result = curl_exec($ch);
curl_close($ch);


В чем может быть ошибка?
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы