{
"one_time": true,
"inline": false,
"buttons": [ <------- а где ещё массив?
{
"action": {
"type": "text",
"payload": "{\"button\":\"btn_1\"}",
"label": "Привет"
},
"color": "secondary"
}
]
}
Каждый элемент кнопки должен находится внутри массива - слоя, а каждый слой внутри массива buttons
Т.е. buttons - это массив слоёв кнопок (уровней, линий), каждый из которых содержит массив кнопок.
Итого:
public function generateButtons(array $buttons, bool $inline = false) : string {
$array = [
'one_time' => !$inline,
'inline' => $inline,
'buttons' => [],
];
foreach ($buttons as $item) {
$array['buttons'][][] = [ <---- ещё один массив
'action' => [
'type' => $item['type'],
'payload' => json_encode($item['payload'], JSON_UNESCAPED_UNICODE),
'label' => $item['label'],
],
'color' => $item['color'],
];
}
return json_encode($array, JSON_UNESCAPED_UNICODE);
}
Результат:
{
"one_time": true,
"inline": false,
"buttons": [
[
{
"action": {
"type": "text",
"payload": "{\"button\":\"btn_1\"}",
"label": "1233123"
},
"color": "secondary"
}
]
]
}