您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

快速入门:拨打电话

通过使用通信服务呼叫 SDK 向应用添加 PSTN 呼叫,开启 Azure 通信服务使用旅程。

重要

Azure 通信服务不支持紧急呼叫

Azure 通信服务的出站语音呼叫服务不能用于联系紧急服务。 应维护传统电话服务来拨打紧急电话。

代码示例

GitHub 上查找此快速入门的最终代码

必备条件

设置

创建新的 Node.js 应用程序

打开终端或命令窗口,为应用创建一个新目录,并导航到该目录。

mkdir calling-quickstart && cd calling-quickstart

运行 npm init -y 以使用默认设置创建 package.json 文件。

npm init -y

安装包

使用 npm install 命令安装适用于 JavaScript 的 Azure 通信服务通话 SDK。

npm install @azure/communication-common --save
npm install @azure/communication-calling@1.1.0 --save

此快速入门建议使用以下版本的 webpack:

"webpack": "^4.42.0",
"webpack-cli": "^3.3.11",
"webpack-dev-server": "^3.10.3"

--save 选项将该库作为 package.json 文件中的依赖项列出。

设置应用框架

此快速入门使用 webpack 捆绑应用程序资产。 运行以下命令以安装 webpack、 webpack-cli 和 webpack-dev-server npm 包,并将它们作为 package.json 中的开发依赖项列出:

npm install webpack@4.42.0 webpack-cli@3.3.11 webpack-dev-server@3.10.3 --save-dev

在项目的根目录中创建一个 index.html 文件。 我们将使用此文件来配置基本布局,该布局允许用户拨打电话。

代码如下:

<!DOCTYPE html>
<html>
  <head>
    <title>Communication Client - Calling Sample</title>
  </head>
  <body>
    <h4>Azure Communication Services</h4>
    <h1>Calling Quickstart</h1>
    <input 
      id="callee-phone-input"
      type="text"
      placeholder="Who would you like to call?"
      style="margin-bottom:1em; width: 230px;"
    />
    <div>
      <button id="call-phone-button" type="button">
        Start Call
      </button>
      &nbsp;
      <button id="hang-up-phone-button" type="button" disabled="true">
        Hang Up
      </button>
    </div>
    <script src="./bundle.js"></script>
  </body>
</html>

在名为 client.js 的项目的根目录中创建一个文件,以包含此快速入门的应用程序逻辑。 添加以下代码以导入呼叫客户端,并获取对 DOM 元素的引用,以便我们可以附加业务逻辑。

import { CallClient, CallAgent } from "@azure/communication-calling";
import { AzureCommunicationTokenCredential } from '@azure/communication-common';

let call;
let callAgent;

const calleePhoneInput = document.getElementById("callee-phone-input");
const callPhoneButton = document.getElementById("call-phone-button");
const hangUpPhoneButton = document.getElementById("hang-up-phone-button");

async function init() {
    const callClient = new CallClient();
    const tokenCredential = new AzureCommunicationTokenCredential('<USER ACCESS TOKEN with PSTN scope>');
    callAgent = await callClient.createCallAgent(tokenCredential);
  //  callPhoneButton.disabled = false;
}

init();

发起电话呼叫

指定在通信服务资源中获取的电话号码,该号码将用于发起呼叫:

警告

请注意,电话号码应采用 E.164 国际标准格式。 (例如:+12223334444)

添加事件处理程序,以在单击 callPhoneButton 时向你提供的电话号码发起呼叫:

callPhoneButton.addEventListener("click", () => {
  // start a call to phone
  const phoneToCall = calleePhoneInput.value;
  call = callAgent.startCall(
    [{phoneNumber: phoneToCall}], { alternateCallerId: {phoneNumber: 'YOUR AZURE REGISTERED PHONE NUMBER HERE: +12223334444'}
  });
  // toggle button states
  hangUpPhoneButton.disabled = false;
  callPhoneButton.disabled = true;
});

结束电话呼叫

添加事件侦听器,以便在单击 hangUpPhoneButton 时结束当前呼叫:

hangUpPhoneButton.addEventListener("click", () => {
  // end the current call
  call.hangUp({
    forEveryone: true
  });

  // toggle button states
  hangUpPhoneButton.disabled = true;
  callPhoneButton.disabled = false;
});

forEveryone 属性结束所有呼叫参与者的呼叫。

运行代码

使用 webpack-dev-server 生成并运行应用。 运行以下命令,在本地 Web 服务器上捆绑应用程序主机:

npx webpack-dev-server --entry ./client.js --output bundle.js --debug --devtool inline-source-map

打开浏览器并导航到 http://localhost:8080/。 应该看到以下内容:

已完成的 JavaScript 应用程序的屏幕截图。

可以通过在添加的文本字段中提供电话号码,然后单击“发起电话呼叫”按钮来呼叫真实电话号码。

警告

请注意,电话号码应采用 E.164 国际标准格式。 (例如:+12223334444)

重要

Azure 通信服务不支持紧急呼叫

Azure 通信服务的出站语音呼叫服务不能用于联系紧急服务。 应维护传统电话服务来拨打紧急电话。

代码示例

GitHub 上查找此快速入门的最终代码

必备条件

先决条件检查

  • 若要查看与通信服务资源关联的电话号码,请登录到 Azure 门户,找到通信服务资源,然后从左侧导航窗格中打开“电话号码”选项卡。

设置

向应用添加 PSTN 功能

通过修改 MainActivity.java,将 PhoneNumber 类型添加到应用中:

import com.azure.android.communication.common.PhoneNumberIdentifier;

发起电话呼叫

指定从通信服务资源中获取的电话号码。 该号码将用于发起呼叫:

警告

请注意,电话号码应采用 E.164 国际标准格式。 (例如:+12223334444)

修改 MainActivity.java 中的 startCall() 事件处理程序,使其处理电话呼叫:

    private void startCall() {
        EditText calleePhoneView = findViewById(R.id.callee_id);
        String calleePhone = calleePhoneView.getText().toString();
        PhoneNumberIdentifier callerPhone = new PhoneNumberIdentifier("+12223334444");
        StartCallOptions options = new StartCallOptions();
        options.setAlternateCallerId(callerPhone);
        options.setVideoOptions(new VideoOptions(null));
        call = agent.startCall(
                getApplicationContext(),
                new PhoneNumberIdentifier[] {new PhoneNumberIdentifier(calleePhone)},
                options);
    }

启动应用并呼叫回显机器人

现在可以使用工具栏上的“运行应用”按钮 (Shift+F10) 启动应用。 可以通过在添加的文本字段中提供电话号码,然后单击“呼叫”按钮来拨打电话。

警告

请注意,电话号码应采用 E.164 国际标准格式。 (例如:+12223334444)

显示已完成应用程序的屏幕截图。

重要

Azure 通信服务不支持紧急呼叫

Azure 通信服务的出站语音呼叫服务不能用于联系紧急服务。 应维护传统电话服务来拨打紧急电话。

必备条件

先决条件检查

  • 若要查看与通信服务资源关联的电话号码,请登录到 Azure 门户,找到通信服务资源,然后从左侧导航窗格中打开“电话号码”选项卡。
  • 你可以通过适用于 iOS 的 Azure 通信服务通话 SDK 来生成和运行应用:

设置

发起电话呼叫

指定在通信服务资源中获取的电话号码,该号码将用于发起呼叫:

警告

请注意,电话号码应采用 E.164 国际标准格式。 (例如:+12223334444)

修改点击“开始呼叫”按钮时执行的 startCall 事件处理程序:

func startCall() {
        // Ask permissions
        AVAudioSession.sharedInstance().requestRecordPermission { (granted) in
            if granted {
                let startCallOptions = StartCallOptions()
                startCallOptions.alternateCallerId = PhoneNumberIdentifier(phoneNumber: "<YOUR AZURE REGISTERED PHONE NUMBER>")
                self.callAgent!.startCall(participants: [PhoneNumberIdentifier(phoneNumber: self.callee)], options: startCallOptions) { (call, error) in
                    if (error == nil) {
                        self.call = call
                    } else {
                        print("Failed to get call object")
                    }
                }
            }
        }
    }

运行代码

可以通过选择“产品” > “运行”或使用 (⌘-R) 键盘快捷方式,在 iOS 模拟器上生成并运行应用。

快速入门应用的最终外观

可以通过在添加的文本字段中提供电话号码,然后单击“开始呼叫”按钮来拨打电话。

警告

请注意,电话号码应采用 E.164 国际标准格式。 (例如:+12223334444)

备注

首次发出呼叫时,系统将提示你提供麦克风访问权限。 在生产应用程序中,应使用 AVAudioSession API 检查权限状态,并在未授予权限时正常更新应用程序的行为。

清理资源

如果想要清理并删除通信服务订阅,可以删除资源或资源组。 删除资源组同时也会删除与之相关联的任何其他资源。 了解有关清理资源的详细信息。

后续步骤

有关详细信息,请参阅以下文章: