Logo
SAP Conversational AI iOS SDK


自 2023 年 1 月起,SAP 的聊天机器人构建平台 SAP Conversational AI 已设置为维护模式。现有客户可以继续使用该产品直到合同结束。

安装 | 示例 | API 文档 | 变更日志

Build Status Conventional Commits Commitizen friendly REUSE status

SAPCAI Swift Package 是一个模块,用于连接到端到端聊天机器人平台 SAP Conversational AI (CAI) 上的机器人。 它提供了一个可插拔的 SwiftUI AssistantView 来启动对话并呈现机器人的各种消息类型

此 Swift Package 是 SAP BTP SDK for iOS 的一个开源补充。

SwiftUI AssistantView

要求

最新版本

以前的版本

版本 1.0.x

先决条件

创建移动渠道

在 SAP Conversational AI 中,您可以通过机器人的“连接”选项卡创建一个移动渠道。

CreateMobileChannel

CreateMobileChannelResults

依赖项

安装

该软件包旨在通过 Swift Package Manager 使用。要将 SAPCAI 添加到您的应用程序目标,请导航到 文件 > 添加包... >。 使用 搜索或输入包 URL 字段,使用存储库 URL https://github.com/SAP/cloud-sdk-ios-cai 找到该软件包。

您可以选择以下软件包产品之一添加到您的应用程序/框架目标。

软件包产品 何时使用
SAPCAI 您尚未嵌入来自 SAP BTP SDK for iOS 的二进制框架
SAPCAI-requiresToEmbedXCFrameworks 您已经将 SAPCommonSAPFoundation 二进制框架嵌入到您的目标

入门

下面的代码片段演示了如何设置 CAIConversation Combine 发布者来初始化 AssistantViewMessagingViewModel。 对于原型设计,您可以将 iOS 客户端直接连接到 SAP Conversational AI Community Edition。 您必须将尖括号中的变量值(例如 <channelId>)替换为您机器人特定的值。

请参阅 企业配置 指南,了解使用 SAPCAI Swift 包并通过 SAP Mobile Services 间接连接到 SAP Conversational AI Enterprise Edition 所需的配置步骤。

设置数据发布者

import SAPCAI
import SAPFoundation
import SwiftUI

/*
  Create the `CAIChannel` object by providing the channel id, channel token, and channel slug of your mobile channel. Values can be looked up in CAI platform.

  If you do not want to hardcode channel information on the client, you can retrieve a list of channels for a given Application ID with `CAIChannelService`.
*/
let caiChannel = CAIChannel(id: "<channelId>", token: "<channelToken>", slug: "<channelSlug>")

// Create CAI service config for a SAPURLSession and URL pointing to CAI API endpoint
let serviceConfig = CAIServiceConfig(urlSession: SAPURLSession(), host: URL(string:"<Example: https://api.cai.tools.sap>")!)
     
// Provide the message delivery object for polling
let polling: MessageDelivering = PollMessageDelivery(channelId: "<channelId>", serviceConfig: serviceConfig)
   
// Create CAIConversation object and use it as publisher
let dataPublisher = CAIConversation(config: serviceConfig, channel: caiChannel, messageDelivery: polling)

// Create view model for `AssistantView`
let viewModel = MessagingViewModel(publisher: dataPublisher)

用户界面

使用 SwiftUI 实现是首选方法。

// `NavigationView` must be present in your view hierachy as `AssistantView` makes use of `NavigationLink`
AssistantView()
  .navigationTitle(Text("Chat")) // if you are in navigation controller
  .environmentObject(viewModel)
  .environmentObject(ThemeManager.shared)
  .onDisappear {
    // you cannot rely on the fact that onDisappear will be called only
    // once because `AssistantView` might trigger further navigations
    // causing the `AssistantView` to disappear and re-appear.
    // Therefore cleanup logic should be handled elsewhere.
  })

SAPCAI 也提供了一个 UIKit 包装器

let vc = MessagingViewController(MessagingViewModel(publisher: dataPublisher))

self.navigationController?.pushViewController(vc, animated: true)

清理

一旦对话结束,您需要调用以下函数以避免内存泄漏和不必要的网络请求。 否则,MessagingViewModel 也无法被释放。

viewModel.cancelSubscriptions()
dataPublisher.resetConversation()

SAPCAI 使用 SDWebImage 及其图像缓存功能,但如果需要,应用程序开发人员有责任清除缓存。 例子

SDImageCache.shared.clearMemory()
SDImageCache.shared.clearDisk(onCompletion: nil)

主题

SAPCAI 将提供两个标准主题

Themes

每个主题都将带有一个支持浅色和深色模式的调色板。

Fiori 主题

ThemeManager.shared.setCurrentTheme( .fiori(FioriColorPalette()) )

Casual 主题

不再维护,因此标记为已弃用。 请勿使用!

ThemeManager.shared.setCurrentTheme( .casual(CasualColorPalette()) )

创建您自己的自定义主题

您还可以提供备用调色板或提供自定义主题。

持久静态菜单

在 SAP Conversational AI 中,您可以将持久静态菜单选项添加到您的聊天机器人,使用户能够在对话期间的任何时候快速触发链接或技能。

Persistent Static Menu In Bot Builder

使用 CAIChannelService.loadPreferences 异步获取您的渠道偏好设置(包括持久静态菜单),然后设置 MessagingViewModel.menu

service.loadPreferences(channel: channel) { result in
  DispatchQueue.main.async {
    switch result {
      case .success(let data):
        viewModel.menu = data?.menu
      case .failure:
        break
    }
  }
}

Persistent Static Menu Rendered by SAP CAI SDK for iOS

限制

Markdown 相关

触发技能按钮相关

图像相关

如何获得支持

请在 GitHub 上提出问题。 SAP 客户可以继续通过 OSS 报告问题以进行 SLA 跟踪。

SAP CAI Answers 论坛中提出有关 CAI 的问题。

贡献

如果您想做出贡献,请查看贡献指南

示例

此存储库中的 CAITestApp 允许您

请参阅此处,了解如何维护测试应用程序的连接设置。