No.076-应用运行之语音触发构想
评论
收藏

No.076-应用运行之语音触发构想

经验分享
昼夜
2024-08-21 17:18·浏览量:953
昼夜
发布于 2024-08-21 17:18953浏览

作者:昼夜

关键词:语音消息、应用触发


一、问题背景

       在日常我们操作影刀的过程中,触发器、任务计划、表单触发器都是我们经常会接触的任务运行方式。但一次在跟小伙伴沟通的过程中,对方提出了一种有趣的想法-能不能通过语音来操控影刀应用的运行,比如通过发出的一条语音消息来自动触发应用在企微上创建一个日程这类的场景。本文就上述的举例场景构思了一个通过语音消息来对应运行影刀应用的框架,大家可以一起探讨一下~

二、解决方案

       整体框架大致思路如下:首先我们监控一个微信群聊中的消息,监控到最新的语音消息并将其转换成文字信息获取到;然后将文字信息传入搭建好的AI服务中,通过大模型去提取语音消息中关键的信息点并回传;随后拿着回传的信息通过企微开放的日程创建API接口去完成日程创建动作。

       这里有几个关键点:1.如何监控微信群聊,并且将微信中的语音信息进行提取;2.AI服务中的提取关键信息的动作如何操作;3.如何操作企微的API来完成创建。下面就这几点来简单介绍我使用到的这个框架。

       首先是如何提取微信中的语音信息,这边采用的是一个基于UIAutomation的开源Python微信自动化库-wxauto,这个库中自身就带着获取聊天记录、监听消息、消息发送等多种自动化功能,且在获取消息的时候不仅可以获取文字消息,也可以获取到图片、文件以及自动保存聊天语音转文字内容。这边使用的就是自动保存聊天语音转文字的功能来转换语音并获取文字内容,具体的代码实现如下:

from wxauto import WeChat

# 在微信群中获取语音消息
def get_wx_voice():
    wx = WeChat()
    wx.ChatWith(who="监控测试群")  # 监控对应的群聊
    # 只保存语音转文字内容,不保存图片和文件
    msgs = wx.GetAllMessage(
        savepic   = False,   
        savefile  = False,   
        savevoice = True    
    )
    
    # print(msgs[-1])
    lastest_message = str(msgs[-1])  # 这边只取最后的一条消息

    return lastest_message

       然后是通过AI服务来提取语音消息中的关键信息,在这里我们借助基础的语言类大模型即可完成,这边进行一个简单的搭建演示。

       最后是通过企微的API来完成创建日程的操作,具体的操作可以参考这个文档(https://www.yingdao.com/community/detaildiscuss?id=8109bf97-4ea2-4baa-8f62-4fcbcaf2d006&tag=&from=userCenter&sort=createTime&page=1)中的步骤和企微日程创建接口文档来自建应用来完成token的获取和日程创建的请求发送。具体的代码示例如下:


import json
import requests
from datetime import datetime

# 创建企微日程
def create_event(access_token, input_info):
    """
        access_token: 
        input_info:传入的用于创建日程的信息
        {
            "开始时间": xxx,
            "结束时间": xxx,
            "参会人": xxx,
            "会议主题": xxx,
            "会议地点": xxx
        }

    """
    start_time = int(datetime.strptime(input_info["开始时间"], "%Y-%m-%d %H:%M:%S").timestamp())
    end_time = int(datetime.strptime(input_info["结束时间"], "%Y-%m-%d %H:%M:%S").timestamp())
    data = {
        "schedule": {
            "start_time": start_time,
            "end_time": end_time,
            "attendees": [{
                "userid": input_info["参会人"]
            }],
            "summary": input_info["会议主题"],
            "location": input_info["会议地点"]
        },
        "agentid": 1000002
    }

    url = f"https://qyapi.weixin.qq.com/cgi-bin/oa/schedule/add?access_token={access_token}"
    response = requests.post(url, json=data)

    return response.json()

       在影刀中具体的流程步骤如下:

   ps.这里只是一个简单的示例,实际上我们还要加上一个判断是否重复的操作


三、效果展示


四、其他事项

   1.语音的长度尽量要控制的不要太长,语音消息过长的情况下有可能会导致获取的失败

   2.非常关键的一点是发送语音人的普通话标准程度,因为用的是微信自带的语音转文字的功能,如果不太标准的话转换出来的内容也有所区别

   3.AI服务提取的准确性需要根据我们的需求多次的进行调试

   

写的不好,仅供参考~

收藏4
全部评论1
最新
发布评论
评论