医疗诊所AI管理助手

一个基于Telnyx的语音AI助手,用于医疗诊所的预约安排、患者查询和管理任务自动化。

  • by grantkazan
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 grantkazan/weather-mcp

使用说明

医疗诊所人工智能管理员

一款基于Telnyx的语音人工智能助手,可处理医疗实践的预约安排、患者查询和管理任务。使用Flask、FastMCP构建,并部署在铁路上。前端部署在Vercel上。

用例

医疗管理涉及大量基于电话的工作:收集患者信息、安排预约和管理实践物流。该项目展示了Telnyx Voice AI如何自动化这些任务,使医务人员能够专注于患者护理,而AI则处理日常调度操作。

现在试试

电话号码: 1-406-381-2086

实时仪表板: https://telnyx-assignment-dashboard.vercel.app/

注: 您的电话号码需要在Telnyx系统中进行验证才能拨打电话。

演示脚本

拨打上面的号码,尝试以下互动:

  1. 查看可用的医生:

    • “有什么医生?”
    • “我能看见谁?”
  2. 预约:

    • “我想和史密斯医生预约明天下午2点见面。”
    • 当被询问时,请提供您的姓名和电话号码
    • 确认细节
  3. 检查可用性:

    • “2025年12月17日星期五,琼斯博士的时间是什么时候?”
  4. 重新安排预约:

    • “我需要用ID 21重新安排预约”
    • 提供新的日期和时间
  5. 查看您的预约:

    • “我有什么预约?”

当您与机器人交互时,仪表板会实时更新。

建筑

┌─────────────┐
│   Caller    │
└──────┬──────┘
       │ (Voice)
       ▼
┌─────────────┐
│   Telnyx    │ ◄── Dynamic Webhook Variables
│  Voice AI   │     (Caller Context)
└──────┬──────┘
       │ (Tool Calls)
       ▼
┌─────────────┐
│ MCP Server  │ ◄── Custom tools for appointments
│  (FastMCP)  │     doctors, availability, etc.
└──────┬──────┘
       │ (HTTP)
       ▼
┌─────────────┐
│  Flask API  │ ◄── REST endpoints
│             │     Database operations
└──────┬──────┘
       │
       ▼
┌─────────────┐
│ PostgreSQL  │ (Production) / SQLite (Local)
└─────────────┘

组件

  • Telnyx语音AI:处理语音交互和自然语言理解
  • MCP服务器:为AI助手提供查询和修改约会数据的工具
  • API弗拉斯克:RESTful后端管理预约、患者和医生
  • PostgreSQL/SQLite:具有双重支持的数据库(Postgres在生产中,SQLite用于本地开发)
  • 前端仪表板:实时查看预约和实践数据

核心功能

AI助手:Telnyx语音AI配置了自定义接待员提示
MCP服务器集成:6个自定义工具(get_doctors、check_availability、book_appointment、重新安排约会、cancel_appointments、get_appointments)
动态Webhook变量:用于个性化问候的呼叫者上下文检索
公共部署:所有服务部署在Railway上,前端部署在Vercel上

技术栈

后端

  • python
  • 烧瓶 -REST API框架
  • PostgreSQL / 数据库 -数据库(生产/开发)
  • FastMCP -模型上下文协议服务器
  • psycopg -PostgreSQL适配器
  • httpx -用于异步操作的HTTP客户端

前端

  • HTML/CSS/JavaScript -仪表板界面
  • 维塞尔 -前端托管

基础设施

  • 铁路 -后端和MCP服务器托管
  • Telnyx -语音AI平台

实时部署

服务

统一资源定位符

前端仪表板

https://telnyx-assignment-dashboard.vercel.app/

API弗拉斯克

https://telnyx-assignment-production.up.railway.app/sanity

还可以使用/directors、/references和/dictors来查看这些特定的JSON端点

MCP服务器

https://web-production-24917.up.railway.app/mcp

API终点

  • GET /doctors -列出所有医生
  • GET /patients -列出所有患者
  • GET /appointments -列出约会(可选 ?patient_phone= 过滤器)
  • GET /appointments/available?doctor_id=&date= -检查可用时隙(即。https://telnyx-assignment-production.up.railway.app/appointments/available?doctor_id=1&date=2025-12-15)
  • POST /appointments -预订新预约
  • PUT /appointments/<id> -更新预约(重新安排或取消)
  • POST /webhook/caller-context -用于呼叫者信息的动态webhook 注意-POST/PUT请求需要JSON正文

GitHub存储库

主要特点

动态呼叫者识别

当现有患者呼叫时,webhook会检索他们的姓名。“谢谢你打电话来……嗨,格兰特!”

数据验证

  • 防止安排过去的约会
  • 防止双重预约患者
  • 验证日期格式并处理闰年
  • 预约前检查医生的可用性

确认工作流程

机器人在预订前确认所有预约细节:

  • 患者姓名和电话号码
  • 医生姓名
  • 日期和时间
  • 等待用户明确确认

实时仪表盘

在一个干净的网络界面中查看所有预约、医生和患者,该界面会随着语音系统的变化而更新。

测试覆盖

快乐之路场景

  • 获取可用医生列表
  • 检查特定医生和日期的可用时间段
  • 按预约ID检索预约信息
  • 列出患者的所有预约
  • 作为新患者预约(由于Telnyx平台中的电话号码要求,很难进行测试)
  • 以现有患者身份预约
  • 重新安排现有预约

错误处理场景

  • 防止医生同时预约两次
  • 拒绝无效日期(例如2月35日、9月31日)
  • 正确识别闰年(不是2027年2月29日)
  • 拒绝与不存在的医生预约
  • 优雅地处理用户错误(例如,输入时打喷嚏、重复信息)
  • 防止安排过去的约会
  • 防止患者冲突(同一患者、同一时间、不同医生)

已知问题和限制

会话上下文

  • 当在一次通话中重新安排多个约会时,机器人可能会引用获取的第一个约会ID,而不是后续的约会ID
  • 变通方案:分别呼叫多个约会更新

验证边缘案例

  • 取消不存在的约会ID将返回成功(应返回404)
  • 如果用户在不提供所需信息的情况下说“确认”,机器人确认接受不完整的数据
  • 备注:后端验证工作正常;这些都是用户体验的改进

语音识别

  • 电话号码需要清晰的发音才能准确捕捉
  • 匿名/被阻止的呼叫者ID路由到语音邮件
  • Bot在再见后没有明确结束通话(继续监听)

时间限制

  • 从技术上讲,允许在未来预约1秒以上(没有最小缓冲时间)
  • 备注:在实践中,语音对话会增加30秒以上的自然延迟

未来改进

优先级增强

  • 更好的预约管理:按上下文参考预约(“我的下一个预约”),而不是要求身份证
  • 候补名单功能:因取消预约而有空时给患者打电话
  • 增强的患者数据:支持更新电话号码、地址、保险信息等。
  • 最小预订缓冲区:强制要求预约的最短交付周期为5-10分钟。或其他交付周期。

用户体验

  • 多预约对话跟踪改进
  • 当预约细节不完整时,进行更明确的确认
  • 再见时自动终止通话

最后说明

  • 所有测试和演示都可以通过前端网页和电话号码完成。
  • 我想有可能克隆所有repo并在本地运行所有内容,但是,自从我的机器和公共设备上都能正常工作以来,我还没有尝试过这种方法。
  • 在尝试克隆存储库并设置其他所有内容时,您的里程很可能会有所不同。特别是关于端口和环境变量。