如何设置 RingCentral 保持音乐?

How to set RingCentral hold music?

RingCentral 能够通过 UI 上传自定义等待音乐。这可以通过 API 以用户和其他用户的管理员身份完成吗?在 API Reference 中搜索暂停音乐没有找到 API。

以下是有关此功能的一些信息:

这是 UI 的样子:

尝试 API 创建自定义用户问候语并将问候语类型设置为 HoldMusic https://developers.ringcentral.com/api-reference/Rule-Management/createCustomUserGreeting

Create custom user greeting API

这有两个步骤:

  1. 获取您要更改的规则的应答规则 ID。这可以是标准规则,例如 business-hours-rule,也可以是您创建的自定义规则。您可以调用 获取呼叫处理规则 API 来获取当前标准和自定义规则的列表。
  2. 调用 更新问候语 API,将 type 设置为 HoldMusic,将 answeringRuleId 设置为您希望更新的 ID更新,例如business-hours-rule

实际上有几种调用更新问候语的方法API:

  1. multipart/form-data 带有单独的字符串部分。在这种方法中,单独的部分以名称 typeansweringRuleIdbinary
  2. 发送
  3. multipart/form-data 和 JSON 元数据部分。在这种方法中,发送一个名为 json 的 JSON MIME 部分,其有效负载如下:{"type": "HoldMusic", "answeringRule": { "id": "12345678" }}
  4. multipart/mixed

我倾向于使用第一种方法(multipart/form-data 使用单独的字符串部分),因为它很容易与 cURL 和许多 HTTP 客户端等工具一起使用。

这是一个使用 Go 的例子:

package main

import(
    "log"
    "net/http"
    "net/url"
    "os"

    "github.com/grokify/gotilla/mime/multipartutil"
    "github.com/grokify/oauth2more/ringcentral"
)

func main() {

    // Get the Client (*http.Client):
    client, err = ringcentral.NewClientPassword(
        ringcentral.ApplicationCredentials{
            ClientID:     os.Getenv("RINGCENTRAL_CLIENT_ID"),
            ClientSecret: os.Getenv("RINGCENTRAL_CLIENT_SECRET"),
            ServerURL:    os.Getenv("RINGCENTRAL_SERVER_URL")},
        ringcentral.PasswordCredentials{
            Username:  os.Getenv("RINGCENTRAL_USERNAME"),
            Extension: os.Getenv("RINGCENTRAL_EXTENSION"),
            Password:  os.Getenv("RINGCENTRAL_PASSWORD")})
    if err!=nil {
        log.Fatal(err)
    }

    // Create the HTTP Request (*http.Request)
    params := url.Values{}
    params.Set("type", "HoldMusic")
    params.Set("answeringRuleId", "business-hours-rule")

    req, err := multipartutil.NewRequest(
        http.MethodPost,
        "https://platform.ringcenral.com/restapi/v1.0/account/~/extension/~/greeting",
        params,
        []multipartutil.FileInfo{
            {
                MIMEPartName: "binary",
                Filepath:     "mygreeting.wav",
            },
        },
    )

    // Send the request
    resp, err = client.Do(req)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("STATUS: %v\n", resp.StatusCode) 
}