投稿
开启辅助访问
 找回密码
 立即注册
取消
搜索
热搜:
活动 交友 discuz
开发者专区 + 关注 已有8人关注 发新帖
分享到

在除首页外的其他页面场景中如何唤起进入导览或导航功能

#已解决#时间:2020-06-09 阅读:6003 回复:9

3

主题

6

帖子

39

积分

合作伙伴

积分
39
本帖最后由 山区大绵羊 于 2020-6-10 10:32 编辑

【需求目标】
在非首页的其他页面或者场景里比如唱歌场景里,接收到speechapi.querybytext('带我去接待点‘)或speechapi.querybytext('导览‘)指令无法立即唤醒进入引路或导览功能,现在需要在所有场景里能立即唤起进入功能
【当前难点】
目前发现进入讲解配置页面的页面里触发speechapi.querybytext(’导览‘)无法进入导览功能,唱歌场景里面speechapi.querybytext(’导览‘)和speechapi.querybytext(’带我去接待点‘)都无法开启功能,当然还有很多没想到的场景,如何确保所有场景都能唤起开启导览导航功能


回复
使用道具 举报

53

主题

127

帖子

997

积分

版主

Rank: 7Rank: 7Rank: 7

积分
997
wuqimeng| 2020-6-11 14:27:52 | 显示全部楼层
王雪嘉跟进中。
回复
使用道具 举报

0

主题

33

帖子

146

积分

注册会员

Rank: 2

积分
146
smith tuo| 2020-6-11 17:52:19 | 显示全部楼层
以示例项目为例:
打开 app/biz/triggers/HomeTrigger.ts,找到如下代码

  1. export class HomeTrigger extends Trigger {
  2.     public constructor() {
  3.         super(TriggerChannel.home);
  4.     }

  5.     public navSwitch = (from: string, to: string): void => {};

  6.     public trigger = (protocol: TriggerProtocol): void => {
  7.         switch (protocol.eventId) {
  8.             case HomeEvent.locationlist:
  9.                 this._trigger(TriggerChannel.destination, protocol);
  10.                 break;
  11.             case HomeEvent.introduction:
  12.                 this._trigger(TriggerChannel.guide, protocol);
  13.                 break;
  14.             case HomeEvent.guide:
  15.                 this._trigger(TriggerChannel.guide, protocol);
  16.                 break;
  17.             default:
  18.                 this._trigger(TriggerChannel.wakeUp, protocol);
  19.         }
  20.     };
  21. }
复制代码

下方代码块表示导览事件的入口,请将此段代码移植到 app/biz/triggers/GlobalVoiceTrigger.ts(或者需要支持的路由对应的trigger文件中)对应的trigger方法中

  1. case HomeEvent.introduction:
  2.                 this._trigger(TriggerChannel.guide, protocol);
  3.                 break;
  4.             case HomeEvent.guide:
  5.                 this._trigger(TriggerChannel.guide, protocol);
  6.                 break;
复制代码
回复
使用道具 举报

3

主题

6

帖子

39

积分

合作伙伴

积分
39
山区大绵羊| 2020-6-11 19:39:46 | 显示全部楼层
你好具体是这样我在app.js里做socket指令接收然后去导览或导航功能我是这么写了
  1. let protocol = {
  2.             channel: ‘home’,
  3.             eventId: HomeEvent.guide,
  4.             type: type,
  5.             result: {}
  6.         };
  7.         DeviceEventEmitter.emit('__trigger__', protocol);
复制代码

按你说的homeevent.guide可以启动导览
但是导航功能怎么用类似方法触发,能具体写下吗,用上面类似代码传以下参数不能实现功能
(HomeEvent.leading, 'leading', TriggerType.ui,{destination: '接待点', backtrack: '接待点'})
回复
使用道具 举报

35

主题

132

帖子

1477

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1477
admin| 2020-6-11 22:18:45 | 显示全部楼层
山区大绵羊 发表于 2020-6-11 19:39
你好具体是这样我在app.js里做socket指令接收然后去导览或导航功能我是这么写了
按你说的homeevent.guide可 ...

兄弟,你要点击 smith tuo的回复进行“回复”。这样他才会收到系统消息,看到你的追问。
不然你俩都是回主题帖,他不知道你又追问了的。 如果我说清楚了,你现在就试试看。
回复
使用道具 举报

35

主题

132

帖子

1477

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1477
admin| 2020-6-11 22:19:17 | 显示全部楼层
admin 发表于 2020-6-11 22:18
兄弟,你要点击 smith tuo的回复进行“回复”。这样他才会收到系统消息,看到你的追问。
不然你俩都是回 ...

就好像我现在回复你的帖子。
回复
使用道具 举报

3

主题

6

帖子

39

积分

合作伙伴

积分
39
山区大绵羊| 2020-6-12 09:44:09 | 显示全部楼层
smith tuo 发表于 2020-6-11 17:52
以示例项目为例:
打开 app/biz/triggers/HomeTrigger.ts,找到如下代码

你好具体是这样我在app.js里做socket指令接收然后去导览或导航功能我是这么写了
  1. let protocol = {
  2.             channel: ‘home’,
  3.             eventId: HomeEvent.guide,
  4.             type: type,
  5.             result: {}
  6.         };
  7.         DeviceEventEmitter.emit('__trigger__', protocol);
复制代码

按你说的homeevent.guide可以启动导览
但是导航功能怎么用类似方法触发,能具体写下吗,用上面类似代码传以下参数不能实现功能
(HomeEvent.leading, 'leading', TriggerType.ui,{destination: '接待点', backtrack: '接待点'})兄弟盼速回
回复
使用道具 举报

0

主题

33

帖子

146

积分

注册会员

Rank: 2

积分
146
smith tuo| 2020-6-12 10:12:21 | 显示全部楼层
山区大绵羊 发表于 2020-6-11 19:39
你好具体是这样我在app.js里做socket指令接收然后去导览或导航功能我是这么写了
按你说的homeevent.guide可 ...

回复少了一块东西,除了要配置trigger以外,还需要配置对应页面的voice,打开app/template/home/HomeVoice.ts,找到如下代码复制,并粘贴至对应的xxxVoice.ts文件中

  1. public onListenCallback = (
  2.         intent: string,
  3.         result: any,
  4.         id: any,
  5.         text: any
  6.     ): boolean => {
  7.         this.viewModel.resetTimeout();
  8.         console.log('onListenCallback.......:' + String(intent));
  9.         switch (intent) {
  10.             case Intent.command_stop:
  11.                 this.viewModel._voiceTrigger(HomeEvent.stop, result);
  12.                 return true;
  13.             case Intent.command_return:
  14.                 this.viewModel._voiceTrigger(HomeEvent.return, result);
  15.                 return true;
  16.             // 跳转导览开始
  17.             case 'MEUI&guide_introduction':
  18.                 this.viewModel._voiceTrigger(HomeEvent.guide, result);
  19.                 return true;
  20.             // 跳转导览结束
  21.             case 'register&ask':
  22.                 //通过下面json拿到姓名
  23.                 // GlobalVoiceTrigger: ', '{"channel":"","type":3,"result":{"answerTextPlay":true,"card":"{}","intent":"register&register","queryType":2,"sid":"writing_40d36464-d84b-4360-b7d8-db8924a0d0d7","skillData":"{}","slots":"{\"start\":[{\"dict_name\":\"\",\"slot_type\":\"NORMAL\",\"text\":\"张三\",\"value\":\"张三\"}]}","soundAngle":-1,"userText":"我叫张三"},"eventId":-1}'
  24.                 let nameValue = result.value;
  25.                 RegisterUtils.getInstance().setRegisterAsk(true);
  26.                 return true;
  27.         }

  28.         return false;
  29.     };
复制代码

PS: trigger配置页面跳转逻辑,voice配置页面语音识别返回结果处理,两者结合,可以实现指定语音结果业务处理逻辑
回复
使用道具 举报

3

主题

6

帖子

39

积分

合作伙伴

积分
39
山区大绵羊| 2020-6-12 10:50:22 | 显示全部楼层
smith tuo 发表于 2020-6-12 10:12
回复少了一块东西,除了要配置trigger以外,还需要配置对应页面的voice,打开app/template/home/HomeVoic ...

没看明白了,关键是我在app.js里处理导航导览的功能开启,不是在各个页面里,我在socket里接收服务器传来的命令字符串比如 ‘接待点’,这时要通过这字符串触发导航功能再app.js里
回复
使用道具 举报

53

主题

127

帖子

997

积分

版主

Rank: 7Rank: 7Rank: 7

积分
997
wuqimeng| 2020-6-16 15:09:29 | 显示全部楼层
楼主,请问问题是否已经解决? 如果没有的话,请再“回复”Smith Tuo,他会再进一步给您解答。
回复
使用道具 举报
快速回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

官方微信
发布 快速回复 返回顶部 返回列表