2016-10-07 1 views
3

Я пытаюсь найти способ запуска части кода (MS Bot Framework, C#, размещенный на Azure) каждый раз, когда a человек упоминается в Yammer или получает прямое сообщение.Вызов веб-службы или запуск кода каждый раз, когда человек упоминается или получает личное сообщение на Yammer and Bot Framework

два пути, которые я пытался:

1) Лучшее, что я придумал сейчас, чтобы включить уведомления по электронной почте от Yammer, и смотреть почтовый ящик для писем от [email protected]. Microsoft Bot Framework имеет настройку с одним щелчком мыши для мониторинга электронной почты, поэтому это работает.

Но электронные письма с уведомлением поступают с задержкой в ​​15 минут, что делает это довольно бесполезным, поскольку мне нужна почти мгновенная производительность.

Наконец, похоже, такой подход просто не работает, потому что MS Bot Framework кажется, ответ на адрес электронной почты, который отправил сообщение, а к тому, что я указать:

if (activity.ChannelId == "email" && activity.From.Id == "[email protected]") 
    { 
     var newActivity = activity.CreateReply(); 

     //doesn't work, sends email back to the activity.From.Id 
     newActivity.Recipient.Id = "[email protected]"; 
     newActivity.Text = "I got a message from " + activity.From.Name + "!"; 
     BotUtils.SendActivityToChat(newActivity); 
    } 

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

2) Еще один подход, который я использую, - это проверять API Yammer каждую минуту, чтобы увидеть, есть ли новые сообщения, но это все еще не мгновенно, и я не уверен, что моя учетная запись будет заблокирована, если я продолжу опрос API слишком часто. (Обновление: официальный лимит ставки составляет 1 опрос в минуту, иначе они вас запретят).

Есть ли что-то, что я пропустил? Как еще вы могли бы запускать кусок кода каждый раз, когда вы получаете сообщение или упоминание о Yammer?

+1

О форуме, возможно, рамки не позволяют ответить на другой адрес, чем отправитель. Можете ли вы попробовать создать совершенно новое письмо вместо 'CreateReply()'? – sashoalm

+1

О опросе, от https://developer.yammer.com/docs/rest-api-rate-limits - вызовы API подлежат ограничению скорости. Превышение каких-либо ограничений скорости приведет к тому, что все конечные точки вернут код состояния 429 (слишком много запросов). Ограничения по скорости для каждого пользователя в приложении. Есть четыре ограничения скорости: Автозаполнение: 10 запросов за 10 секунд. Сообщений: 10 запросов за 30 секунд. Уведомления: 10 запросов за 30 секунд. Все остальные ресурсы: 10 запросов за 10 секунд. – sashoalm

+0

@sashoalm К сожалению, та же самая страница для ограничений скорости говорит: «При опросе сообщений не превышайте один опрос в минуту. Приложения, которые будут опробоваться чрезмерно, будут заблокированы». Однако я попробую отправить новое письмо. Благодаря! – K48

ответ

1

В программе BotFramework не разрешается отвечать на сообщение на другой адрес, кроме отправителя. Однако, если получателем является тот, который бот получил ранее, вы можете отправить им Проактивное сообщение. Чтобы отправить проактивное сообщение, вы можете сохранить ServiceUrl и UserAccess (UserAccess) пользователя (извлеченные из одного из сообщений от этого пользователя) и использовать эти данные для отправки нового действия от вашего бота к этому пользователю.

Вот example in C#

Вот example in Node.js

Смежные вопросы