Bitrix24 Webhook如何获取数组中的工作电话与座机数据
Bitrix24 Webhook提取联系人工作电话/座机数据问题
我在Bitrix24里通过Webhook获取联系人数据,电话字段是包含多个子数组的数组,不知道怎么从中提取工作电话或座机的数据。我用SELECT[]参数搭配PHONE来获取电话数据,试过PHONE[0]但没用,求帮忙解析结构,谢谢!
返回的电话字段结构如下:
[PHONE] => Array ( [0] => Array ( [ID] => 45545 [VALUE_TYPE] => WORK [VALUE] => +351911111111 [TYPE_ID] => PHONE ) [1] => Array ( [ID] => 45547 [VALUE_TYPE] => MOBILE [VALUE] => +351910000000 [TYPE_ID] => PHONE ) [2] => Array ( [ID] => 45549 [VALUE_TYPE] => HOME [VALUE] => +351220000000 [TYPE_ID] => PHONE ) [3] => Array ( [ID] => 45551 [VALUE_TYPE] => FAX [VALUE] => +351210000000 [TYPE_ID] => PHONE ) [4] => Array ( [ID] => 45553 [VALUE_TYPE] => PAGER [VALUE] => +351230000000 [TYPE_ID] => PHONE ) [5] => Array ( [ID] => 45555 [VALUE_TYPE] => MAILING [VALUE] => +351240000000 [TYPE_ID] => PHONE ) [6] => Array ( [ID] => 45557 [VALUE_TYPE] => OTHER [VALUE] => +351250000000 [TYPE_ID] => PHONE ) )
解决方案
1. 先搞懂数据结构
返回的PHONE是一个数组,每个子数组里的字段含义:
ID:这条电话记录的唯一标识VALUE_TYPE:电话类型,比如WORK是工作电话、MOBILE是手机、HOME是住宅电话VALUE:实际的电话号码TYPE_ID:固定为PHONE,表示这是电话字段
2. 提取工作电话的正确方式
你不能直接用PHONE[0]拿工作电话,因为数组索引是按添加顺序排的,工作电话不一定在第0位。正确做法是遍历整个PHONE数组,筛选出VALUE_TYPE为WORK的项:
PHP示例代码
// 假设$contact是从Webhook获取到的联系人完整数据 $workPhones = []; if (isset($contact['PHONE']) && is_array($contact['PHONE'])) { foreach ($contact['PHONE'] as $phoneItem) { if ($phoneItem['VALUE_TYPE'] === 'WORK') { $workPhones[] = $phoneItem['VALUE']; } } } // 输出所有工作电话 print_r($workPhones);
通用逻辑(不管用什么语言)
核心思路都是:
- 循环遍历
PHONE数组的每一个子元素 - 判断子元素的
VALUE_TYPE是否等于WORK - 符合条件的就提取
VALUE字段
3. 关于SELECT参数的说明
用SELECT[]=PHONE是对的,它会返回所有电话记录。Bitrix24的Webhook不支持直接通过SELECT[]=PHONE[WORK]这种方式筛选,必须拿到完整数组后自己处理。
内容的提问来源于stack exchange,提问作者user2068739
相关产品推荐
相关产品推荐

