如何处理用户离开对话

时间:2019-12-24 18:12:02

标签: botframework

我们有一些使用OnMember GibraltarAsync方法的示例,但没有示例显示如何处理用户离开会话。我尝试重写OnMembersRemovedAsync,但似乎并未调用它(至少在使用bot框架仿真器时)。

我需要在用户离开/离开对话时进行一些清理。 一个例子或任何技巧将不胜感激。

更新:我正在使用C#和Bot框架v4

1 个答案:

答案 0 :(得分:2)

这将是特定于频道的,因为它取决于频道的功能,该功能可在用户离开会话时发送更新。任何其他渠道,您都需要研究。

对于Facebook,我无法找到涵盖此类操作的范围。这些是可用范围,您可以更仔细地参考here

  • 消息
  • message_deliveries
  • message_echoes
  • message_reads
  • messaging_account_linking
  • messaging_checkout_updates(测试版)
  • messaging_game_plays
  • messaging_handovers
  • messaging_optins
  • messaging_payments(beta)
  • messaging_policy_enforcement
  • messaging_postbacks
  • messaging_pre_checkouts(测试版)
  • messaging_referrals
  • 待机

Web Chat作为一项功能,也不包括此功能。但是,由于这是一个网页,因此可以利用onbeforeunload()窗口函数来调度事件。事件侦听器将利用Web聊天的存储将消息或事件分发给机器人。为了清楚起见,我通过SEND_MESSAGESEND_EVENT发送不同类型的数据。

const store = window.WebChat.createStore( {}, ( { dispatch } ) => next => async action => {
  return next( action );
};

window.addEventListener( 'sendEventActivity', ( { data } ) => {
  store.dispatch({
    type: 'WEB_CHAT/SEND_MESSAGE',
    payload: {
      text: data
    }
  } )
  ,
  store.dispatch( {
    type: 'WEB_CHAT/SEND_EVENT',
    payload: {
      name: 'user_event',
      value: {
        name: 'end_conversation',
        value: 'user ended conversation'
      },
      text: 'The user has left the conversation.'
    }
  } )
} );

window.onbeforeunload = function() {
  const eventSendActivity = new Event( 'sendEventActivity' );
  eventSendActivity.data = 'User left conversation';
  window.dispatchEvent( eventSendActivity );
}
{ type: 'message',
  id: '4uPdpZhlTFfBMziBE7EmEI-f|0000004',
  timestamp: 2020-01-10T18:21:26.767Z,
  serviceUrl: 'https://directline.botframework.com/',
  channelId: 'directline',
  from: { id: 'dl_123', name: 'johndoe', role: 'user' },
  conversation: { id: '4uPdpZhlTFfBMziBE7EmEI-f' },
  recipient: { id: 'botberg@QaeuoeEamLg', name: 'Dungeon Runner' },
  textFormat: 'plain',
  locale: 'en-US',
  text: 'User left conversation',
  channelData:
  { clientActivityID: '15786804807910gegwkp2kai',
    clientTimestamp: '2020-01-10T18:21:20.792Z' }
}

{ type: 'event',
  id: '4uPdpZhlTFfBMziBE7EmEI-f|0000005',
  timestamp: 2020-01-10T18:21:26.780Z,
  serviceUrl: 'https://directline.botframework.com/',
  channelId: 'directline',
  from: { id: 'dl_123', name: 'johndoe', role: 'user' },
  conversation: { id: '4uPdpZhlTFfBMziBE7EmEI-f' },
  recipient: { id: 'botberg@QaeuoeEamLg', name: 'Dungeon Runner' },
  locale: 'en-US',
  channelData:
  { clientActivityID: '1578680480821h7kgfm9cyz',
    clientTimestamp: '2020-01-10T18:21:20.821Z' },
  value:
  { name: 'end_conversation', value: 'user ended conversation' },
  name: 'user_event'
}

希望有帮助!